<?php
/**
 * 商品模型
 * @author maniac
 */
namespace app\common\model;

class Point extends SoftDel
{
    public $tableName = '商品';                   // 数据表名称
    public $logId     = ['id', 'goods_name'];     // 日志操作相关标识
    public $softId    = 1;                        // 软删除标识
    
    protected $autoWriteTimestamp = true;         // 自动写入时间戳
    
    // 自动转换
    protected $type = [
        'category_id'       => 'integer',
        'brand_id'          => 'integer',
        'supplier_id'       => 'integer',
        'cost_price'        => 'float',
        'market_price'      => 'float',
        'sale_price'        => 'float',
        'point'             => 'integer',
        'diy_sale_nums'     => 'integer',
        'goods_stock'       => 'integer',
        'goods_stock_alarm' => 'integer',
        'good_mods_id'      => 'integer',
        'goods_thumb_id'    => 'integer',
        'is_sale'           => 'integer',
        'is_latest'         => 'integer',
        'is_hot_sale'       => 'integer',
        'is_recommand'      => 'integer',
        'is_stock_visible'  => 'integer',
        'max_purchase_nums' => 'integer',
        'min_purchase_nums' => 'integer',
        'list_order'        => 'integer',
    ];
    /**
     * 商品使用积分获取器
     * @param string $value 字段值
     * @param array  $data  所有数据
     */
    public function getPointAttr($value, $data)
    {
    	$sku = $this->getSkuAttr($value, $data);
    	if (empty($sku)) return $data['point'];
    	return  $sku[0]['point'];
    }
   
    /**
     * 商品缩略图获取器
     * @param  string $value 字段值
     * @param  array  $data  所有数据
     */
    public function getImageUriAttr($value, $data)
    {
        return $data['goods_thumb_id'] ? attach_uri($data['goods_thumb_id']) : '';
    }
    /**
     * 商品 品牌缩略图获取器
     * @param  string $value 字段值
     * @param  array  $data  所有数据
     */
    public function getBrandImageUriAttr($value, $data)
    {
    	$brand = GoodBrands::field('id,image_id')->where('id',$data['brand_id'])->find();
    	return $data['brand_id'] ? attach_uri($brand['image_id']) : '';
    }
    /**
     * 商品相册获取器
     * @param  string $value 字段值
     */
    public function getGoodsAlbumAttr($value)
    {
        return $value ? unserialize($value) : '';
    }
    
    /**
     * 商品视频获取器
     * @param  string $value 字段值
     */
    public function getGoodsVideoAttr($value)
    {
        return $value ? unserialize($value) : '';
    }
    
    /**
     * 商品视频获取器
     * @param  string $value 字段值
     * @param  array  $data  所有数据
     */
    public function getGoodsVideoUriAttr($value, $data)
    {
        $video = $this->getGoodsVideoAttr($data['goods_video']);
        return $video ? attach_uri($video[0]['value']) : '';
    }
    
    /**
     * 商品相册获取器
     * @param string $value 字段值
     * @param array  $data  所有数据
     */
    public function getGoodsAlbumDetailAttr($value, $data)
    {
        $album = $data['goods_album'] ? unserialize($data['goods_album']) : [];
        foreach ($album as $k => $v) {
            $album[$k]['value'] = attach_uri($v['value']);
        }
        return $album;
    }
    
    /**
     * 最少购买数量获取器
     * @param string $value 字段值
     * @param array $data   所有数据
     */
    public function getMinPurchaseNumsAttr($value, $data)
    {
        return $value ?: 1;
    }
    
    /**
     * 每人限购数量获取器
     * @param string $value 字段值
     * @param array $data   所有数据
     */
//     public function getMaxPurchaseNumsAttr($value, $data)
//     {
//         return ($value && $value < $data['goods_stock']) ? $value : $data['goods_stock'];
//     }
    
    /**
     * 商品规格获取器
     * @param string $value 字段值
     * @param array  $data  所有数据
     */
    public function getGoodsSpecFormatArrayAttr($value, $data)
    {
        $arr = $data['goods_spec_format'] ? json_decode($data['goods_spec_format'], true) : [];
        foreach ($arr as $key => $val) {
            if (!empty($val['spec_value'])) {
                foreach ($val['spec_value'] as $k => $v) {
                    if (isset($v['spec_value_data']) && strpos($v['spec_value_data'], '/static/uploads/') !== false) {
                        $arr[$key]['spec_value'][$k]['spec_value_data'] = config('system.attach_uri_prefix').ltrim($v['spec_value_data'], '/');
                    }
                }
            }
        }
        return $arr;
    }
    
    /**
     * 获取是否上架状态文本
     * @param int   $value 字段值
     * @param array $data  所有数据
     */
    public function getIsSaleTxtAttr($value, $data)
    {
        $txt = ['下架', '上架', '违规（禁售）'];
        return $txt[$data['is_sale']];
    }
    
    /**
     * 获取是否新品状态文本
     * @param int   $value 字段值
     * @param array $data  所有数据
     */
    public function getIsLatestTxtAttr($value, $data)
    {
        $txt = ['非新品', '新品'];
        return $txt[$data['is_latest']];
    }
    
    /**
     * 获取是否热卖状态文本
     * @param int   $value 字段值
     * @param array $data  所有数据
     */
    public function getIsHotSaleTxtAttr($value, $data)
    {
        $txt = ['非热卖', '热卖'];
        return $txt[$data['is_hot_sale']];
    }
    
    /**
     * 获取是否推荐状态文本
     * @param int   $value 字段值
     * @param array $data  所有数据
     */
    public function getIsRecommandTxtAttr($value, $data)
    {
        $txt = ['不推荐', '推荐'];
        return $txt[$data['is_recommand']];
    }
    
    /**
     * 获取上/下架时间
     * @param string $value 字段值
     * @param array $data   所有的数据
     */
    public function getSaleTimeTxtAttr($value, $data)
    {
        return $data['sale_time'] ? date('Y-m-d H:i:s', $data['sale_time']) : '-';
    }
    
    /**
     * 获取商品 sku
     * @param  string $value 字段值
     * @param  array  $data  所有数据
     */
    public function getSkuAttr($value, $data)
    {
        $where = [
            'goods_id' => $data['id'],
        ];
        return PointSku::field('id,sku_id,sku_sn,sku_name,point,stock,sale_nums')->where($where)->order('id ASC')->select()->toArray();
    }
    
    /**
     * 获取商品总销量
     * @param string $value 字段值
     * @param array  $data  所有数据
     */
    public function getTotalSaleNumsAttr($value, $data)
    {
        $info = Point::getById($data['id']);
        $sku = $this->getSkuAttr($value, $data);
        if ($sku) {
            $nums = 0;
            foreach ($sku as $v) {
                $nums += $v['sale_nums'];
            }
            return $nums + $info['diy_sale_nums'];
        } else {
            return $info['diy_sale_nums'];
        }
    }
    
    /**
     * 获取商品属性
     * @param string $value 字段值
     * @param array  $data  所有数据
     */
    public function getAttrValueAttr($value, $data)
    {
        $where = [
            'goods_id' => $data['id'],
        ];
        return GoodAttrValue::field('id,attr_id,attr_name,attr_value')->where($where)->order('id ASC')->select()->toArray();
    }

    public function good_list($where){
        $a= $this->where($where)->field('id,goods_thumb_id,goods_name,sale_price')->limit(4)->select();
        foreach ($a as $key => $value) {
            $a[$key]['goods_thumb']=getimg($value['goods_thumb_id']);
        }
        return $a;
    }
}
